Repository navigation
ai-node-canvas 0.84.0: the review is answered, the progress panel lets go, and a stopped call says what to do - #78
Merged
MyPrototypeWhat merged 2 commits intoOct 26, 2026
Conversation
… lets go The review of 0.82.0 left thirteen things to fix. They are fixed here; the one that was approved as it is stays as it is. A download could be sent to a machine of its own: the address was judged once, and the connection could go somewhere else. The address that was judged is now the address that is used - the name is resolved once, and the connection is pinned to that address, on every hop of a redirect. The private addresses are judged by the rules of Node's own BlockList, and an IPv6 address that carries an IPv4 inside it is judged by that IPv4. A file could be written through a link that points at nothing. A name that is already taken is refused instead of written through, and the name of a template is the name of the file that holds it: a template of the user cannot be overwritten, and a template that could not be applied is not saved. A run the runtime refused left the node busy for ever. The refusal now names the run that is going, the chain waits for that run, and the node is free the moment the run is refused. The progress panel could not be put away, and a run that had failed stayed on the screen for ever. It is a progress panel, not a history: a run that is over is kept thirty seconds so its reason can still be read, and then it goes. It has a button that puts it away, and a run that starts brings it back. The READMEs and the MCP description now say what the tools do: that a template can be listed and put on a canvas, that putting one there does not run it, and that a download can only go to an address the runtime is willing to reach. 246 tests, 246 mutations, 0 errors.
…e MCP server gets a minute A call the Host stops is stopped by the Host, not by us. The connector API takes a signal and nothing else, and a picture is asked for in one synchronous call - there is no task to poll, the way a video has one. The message on the card now says where that limit is (about thirty seconds, and it is the Host's), and what the user can still change: a smaller request. A video is submitted and polled, which is why the same limit reads as a mystery for a picture and not for a video. The MCP server is given a minute to answer instead of half of one. A call that starts a run hands the work to the page and waits for the page's answer, and a page that is busy must not turn the call into a failure. 248 tests, 248 mutations, 0 errors.
MyPrototypeWhat
approved these changes
Oct 26, 2026
MyPrototypeWhat
left a comment
Collaborator
There was a problem hiding this comment.
Reviewed at 9cd9379 (v0.84.0). Looks good to merge.
- The new stop messages only cover
CONNECTOR_OUTCOME_UNKNOWNandCONNECTOR_TIMEOUT, and the errorcodepassed to callers is unchanged. - The 60s MCP timeout is a per-call limit and within what other plugins here already use.
- The PR touches only
plugins/antianqi/ai-node-canvas/, the version is 0.84.0 everywhere, and it merges cleanly intomain. - CI passes on Node 22, and all 248 plugin tests pass.
Optional
- An unknown outcome isn't always a timeout. The call can also fail when the connection drops. Wording like "this often happens when the call takes too long" keeps the advice without stating the cause as fact.
- The 30-second figure. The public docs don't promise it, so the message could go stale quietly. "A time limit (currently about 30 seconds)" or no number would age better. The test could check for
宿主and the advice instead of30 秒. - Duplicate image sentence. Moving it into one constant keeps the two branches from drifting apart.
- Also worth a look later: object export validation, the remaining IPv4-in-IPv6 forms, card content on a busy refusal, the
saveToDownloadsrace, andrealpathon directories.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What it does
This PR answers the review of #71 (APPROVED with comments) and fixes two
problems a user reported on the released build.
ai-node-canvas0.84.0 — 13 review items fixed, 1 kept as it is, plus theprogress panel and the generation timeout.
The review items
lookupoverride — on every hop of a redirect, not only the firstnet.BlockList, and an IPv6 address that carries an IPv4 inside it (::ffff:7f00:1,::7f00:1, NAT6464:ff9b::7f00:1, 6to42002:7f00:1::) is judged by that IPv4 — one rule, one placelstatfirst and written withflag: 'wx'; a taken name gets a(1)suffix instead of being written throughtaken), and the API answers409templateStepsError) is used by the three places that read, apply and save a templatecanvasTitleAfterTemplate).jsonfile, and only a template document — an object is serialized, a string must pass the template rulesObject.hasOwn—generateno longer findsgenerate-videocanvas_list_templatesandcanvas_apply_templateare described, and putting a template on a canvas is said not to run itThe user-reported problems
1. The progress panel could not be put away, and a failed run stayed for ever
The panel is a progress panel, not a history:
read — and then it goes. A failed run is a finished run.
away has to be the user's choice.
canvas.
The rules live in one place (
miniapp/client/run-watch.mjs) as plainfunctions, and the button is built by one small module
(
miniapp/client/task-panel.mjs) so it can be tested without a browser.2. A picture generation died after 30 seconds
That 30 seconds is the Host's, not ours. The connector API is
hostConnector.call(toolRef, args, { signal })— the options hold a signal andnothing else, so a MiniApp cannot ask for a longer window. A picture is asked
for in one synchronous call (
generate_imagehas no task number to poll),which is why a slow picture is simply lost; a video is submitted and
polled (
submit_video_generation+query_video_generation), which is whythe same limit never shows up there.
So the limit cannot be widened from here. What can be done is said out
loud, and it is:
seconds, and it is the Host's) and what the user can still change — a
picture has no task to poll, so the way out is a smaller request: 1K
instead of 2K/4K, fewer reference images, then generate again;
starts a run hands the work to the page and waits for the page's answer, and
a busy page must not turn the call into a failure.
Verification
node --test tests/smoke.test.mjs)purpose and the test had to turn red (the script lives outside the package,
it is the checker's own harness)
declarations
0 errors, 1 warning(HOST_CONNECTOR_UNVERIFIED—the Host grants the declared providers at install time)
npm run check→ 69/69, exit 0;npm run validate→plugins/antianqi/ai-node-canvas: 0 errors, 1 warningand
repository: OK269afb3cee84): the 「收起」 button puts thepanel away while the run keeps going; a new run brings the panel back; a
finished run leaves the panel by itself after 30 seconds; no error in the
console